A network based client-server environment can be used to implement a distributed file system that provides a client access to files stored on one or more remote servers. These files are accessed through a network and are represented as though the files were stored local to the client. One example of such a file system is a network file system (NFS) that was developed by Sun Microsystems. NFS version 3 is one of the most common distributed file systems in use today and version 3 standards are documented in RFC 1813. NFS is a stateless protocol which means that the file server does not store per-client information or the access status of a file. Rather, the NFS server supports a lookup procedure that uses a “file handle” to uniquely identify a specific file located on a network file server and indicate the file to be available to the client presenting the file handle, if approved to access the file. NFS uses export points which are directories positioned as the root directory of a sub-tree to be exported or made accessible to an approved client. From an NFS perspective, a directory is basically a file containing other files, and file attribute information has flags set to inform the system that the file is actually a directory. Similar to the social security number, there is a concept of an inode number which uniquely exists for all the files on the system. An inode (index node) is a data structure found in many Unix file systems, which stores all the information about a file system object (file directory, etc.), except the data content and file name.
The NFS server is configured with a list of clients and export points that each client may access. When a client requests connection to the file server and access to an export point directory, the request is referred to as a “mount”. A client that wishes to mount one of the directories first contacts the mount daemon on the server (mountd). A daemon in a multitasking computer is a program process that runs in the background rather than run by an interactive user. If the client is authorized, the mount daemon processes the client request and provides the client with a root file handle, which can be presented to the NFS daemon (nfsd) on the file server to access objects in the export point.
File handles are used to uniquely describe the file or directory on which an operation is to be performed. File handles include three areas of information, a volume identifier, an inode number, and a generation number. Together, these three items constitute a unique identifier for a file or directory that a client wishes to access. The volume identifier informs the server as to which file system the request refers to, because an NFS server can export more than one file system. The inode number tells the server which file within that partition the request is accessing and the generation number is needed when reusing an inode number in which case the inode number is incremented thus insuring that a client with an old file handle can't accidentally access the newly-allocated file. An inode number points to a data structure in which information about the file can be found, that in part can include: the size of the file, user ID of the file, device ID, group ID, access privileges, pointers to the storage of the content, time stamp of file creation and modification, as well as other attributes. In general, the inode contains all information about a file outside of the actual name of the file and the actual data content of the file.
Normal access involves a file server being set up with minimal information regarding a client user, such as assigning a user ID and determining the files and directories the client is authorized to access. Clients initiate a connection to the file server by a programming step referred to as a mounting operation (mound), which is often included in client boot up code. Opaque to the client, the file server and client exchange communications and the successful result is for the client to display one or more shared directories as if the one or more shared directories are a disk partition attached locally to the client.